import java.util.Stack;

class MyQueueUseStack {

    public Stack<Integer> inputStack;  // 用于处理入队（push）操作的栈
    public Stack<Integer> outputStack; // 用于处理出队（pop/peek）操作的栈

    // 构造函数，初始化两个栈
    public MyQueueUseStack() {
        inputStack = new Stack<>();
        outputStack = new Stack<>();
    }

    // 入队操作：直接将元素压入inputStack
    public void push(int x) {
        inputStack.push(x);
    }

    // 出队操作
    public int pop() {
        if(empty()) {
            return -1; // 队列为空时返回-1（根据需求可能应抛异常）
        }
        // 如果outputStack有元素，直接弹出栈顶（即队列头部）
        if(!outputStack.empty()) {
            return outputStack.pop();
        }
        // 将inputStack所有元素转移到outputStack，反转顺序
        while (!inputStack.empty()) {
            int temporarily = (inputStack.pop());
            outputStack.push(temporarily);
        }
        return outputStack.pop(); // 弹出新的栈顶元素（队列头部）
    }

    // 查看队首元素
    public int peek() {
        if(empty()) {
            return -1; // 队列为空返回-1
        }
        // outputStack不为空时，直接查看栈顶
        if(!outputStack.empty()) {
            return outputStack.peek();
        }
        // 转移元素后查看栈顶
        while (!inputStack.empty()) {
            outputStack.push(inputStack.pop());
        }
        return outputStack.peek();
    }

    // 判断队列是否为空
    public boolean empty() {
        // 两个栈都为空时队列为空
        return inputStack.empty() && outputStack.empty();
    }
}